<?php
namespace Ipartek\PruebaBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Ipartek\PruebaBundle\Entity\Alumno;

/**
 * Fixtures de la entidad Alumno.
 * Crea 30 alumnos de prueba para poder probar la aplicaci�n.
 */
class Alumnos extends AbstractFixture implements OrderedFixtureInterface
{
	
	public function getOrder()
	{
		return 2;
	}
	
	public function load(ObjectManager $manager)
	{
		for ($i=1; $i<=10; $i++) {
			$alumno = new Alumno();
			
			$alumno->setNombre($this->getNombre());
			$alumno->setApellido1($this->getApellidos());
			$alumno->setApellido2($this->getApellidos());
			
			$dni = substr(rand(), 0, 8);
            $alumno->setDni($dni.substr("TRWAGMYFPDXBNJZSQVHLCKE", strtr($dni, "XYZ", "012")%23, 1));
            
            $alumno->setEmail('usuario'.$i.'@localhost');
            $alumno->setDireccion($this->getDireccion());
			
			$manager->persist($alumno);
		}
		
		$manager->flush();
	}
	
	/**
	 * Generador aleatorio de nombres de personas.
	 * Aproximadamente genera un 50% de hombres y un 50% de mujeres.
	 *
	 * @return string Nombre aleatorio generado para el usuario.
	 */
	private function getNombre()
	{
		// Los nombres m�s populares en Espa�a seg�n el INE
		// Fuente: http://www.ine.es/daco/daco42/nombyapel/nombyapel.htm
	
		$hombres = array(
				'Antonio', 'José', 'Manuel', 'Francisco', 'Juan', 'David',
				'José Antonio', 'José Luis', 'Jesús', 'Javier', 'Francisco Javier',
				'Carlos', 'Daniel', 'Miguel', 'Rafael', 'Pedro', 'José Manuel',
				'Ángel', 'Alejandro', 'Miguel Ángel', 'José María', 'Fernando',
				'Luis', 'Sergio', 'Pablo', 'Jorge', 'Alberto'
		);
		$mujeres = array(
				'María Carmen', 'María', 'Carmen', 'Josefa', 'Isabel', 'Ana María',
				'María Dolores', 'María Pilar', 'María Teresa', 'Ana', 'Francisca',
				'Laura', 'Antonia', 'Dolores', 'María Angeles', 'Cristina', 'Marta',
				'María José', 'María Isabel', 'Pilar', 'María Luisa', 'Concepción',
				'Lucía', 'Mercedes', 'Manuela', 'Elena', 'Rosa María'
		);
	
		if (rand() % 2) {
			return $hombres[array_rand($hombres)];
		} else {
			return $mujeres[array_rand($mujeres)];
		}
	}
	
	/**
	 * Generador aleatorio de apellidos de personas.
	 *
	 * @return string Apellido aleatorio generado para el usuario.
	 */
	private function getApellidos()
	{
		// Los apellidos m�s populares en Espa�a seg�n el INE
		// Fuente: http://www.ine.es/daco/daco42/nombyapel/nombyapel.htm
	
		$apellidos = array(
				'García', 'González', 'Rodríguez', 'Fernández', 'López', 'Martínez',
				'Sánchez', 'Pérez', 'Gómez', 'Martín', 'Jiménez', 'Ruiz',
				'Hernández', 'Díaz', 'Moreno', 'Álvarez', 'Muñoz', 'Romero',
				'Alonso', 'Gutiérrez', 'Navarro', 'Torres', 'Domínguez', 'Vázquez',
				'Ramos', 'Gil', 'Ramírez', 'Serrano', 'Blanco', 'Suárez', 'Molina',
				'Morales', 'Ortega', 'Delgado', 'Castro', 'Ortíz', 'Rubio', 'Marín',
				'Sanz', 'Iglesias', 'Nuñez', 'Medina', 'Garrido'
		);
	
		return $apellidos[array_rand($apellidos)].' '.$apellidos[array_rand($apellidos)];
	}
	
	/**
	 * Generador aleatorio de direcciones postales.
	 *
	 * @return string         Direcci�n postal aleatoria generada.
	 */
	private function getDireccion()
	{
		$prefijos = array('Calle', 'Avenida', 'Plaza');
		$nombres = array(
				'Lorem', 'Ipsum', 'Sitamet', 'Consectetur', 'Adipiscing',
				'Necsapien', 'Tincidunt', 'Facilisis', 'Nulla', 'Scelerisque',
				'Blandit', 'Ligula', 'Eget', 'Hendrerit', 'Malesuada', 'Enimsit'
		);
		$ciudades = array(
				'Madrid',
				'Barcelona',
				'Valencia',
				'Sevilla',
				'Zaragoza',
				'Málaga',
				'Murcia',
				'Palma de Mallorca',
				'Las Palmas de Gran Canaria',
				'Bilbao',
				'Alicante',
				'Córdoba',
				'Valladolid',
				'Vigo',
				'Gijón',
				'Hospitalet de Llobregat',
				'La Coruña',
				'Granada',
				'Vitoria-Gasteiz',
				'Elche',
				'Oviedo',
				'Santa Cruz de Tenerife',
				'Badalona',
				'Cartagena',
				'Tarrasa',
		);
	
		return $prefijos[array_rand($prefijos)].' '.$nombres[array_rand($nombres)].', '.rand(1, 100)."\n"
				.$this->getCodigoPostal().' '.$ciudades[array_rand($ciudades)];
	}
	
	/**
	 * Generador aleatorio de c�digos postales
	 *
	 * @return string C�digo postal aleatorio generado.
	 */
	private function getCodigoPostal()
	{
		return sprintf('%02s%03s', rand(1, 52), rand(0, 999));
	}
}